/*******************************************************************************
 * @author scl
 * @email shchlu188@163.com
 ******************************************************************************/


#include "modbus_slave.h"
#include "module_esp8266.h"

extern volatile uint8_t cur_socket_id;
static uint8_t modbus_resp_buf[300];/*保存modbus返回数据*/
/**************************************和esp8266对接部分****************************************/


/**
 * @brief 从机响应数据
 * @param data
 * @param len
 */
extern void mb_send(void *data, uint16_t len) {
//    esp8266_set_debug_call(os_ps);
    if (esp8266_server_tpc_send_bytes(cur_socket_id, data, len, -1)) {
        os_ps("response ok\r\n");
    } else {
        os_ps("response error\r\n");
    }
}

/**
 * @brief 从机接收数据
 * @param ret_len 保存接收数据的长度
 * @return 返回接收数据首地址，如果没有接收数据则返回NULL
 */
extern uint8_t *mb_slave_read_rec_data(uint16_t *ret_len) {
    return NULL;
}
/**************************************和esp8266对接部分****************************************/

/**
 * @brief 获取从机地址
 * @return
 */
extern uint8_t mb_slave_get_addr(void) {
    return 0x1;
}


/**
 * @brief 获取从机响应数据存储的首地址
 * @return
 */
extern uint8_t *mb_slave_get_response_buf(void) {
    return modbus_resp_buf;
}



/*读线圈状态*/
sys_weak slave_rsp_code_def slave_read_coil_state(uint16_t reg_addr, uint16_t reg_num, bool *ret_data) {

    return rsp_nut_support_cmd;
}

/*读输入状态*/
sys_weak slave_rsp_code_def slave_read_input_state(uint16_t reg_addr, uint16_t reg_num, bool *ret_data) {
    return rsp_nut_support_cmd;

}

/*读保持寄存器*/
sys_weak slave_rsp_code_def slave_read_hold_reg(uint16_t reg_addr, uint16_t reg_num, uint8_t *ret_data) {
    return rsp_ok;

}

/*读输入寄存器*/
sys_weak slave_rsp_code_def slave_read_input_reg(uint16_t reg_addr, uint16_t reg_num, uint8_t *ret_data) {
    return rsp_nut_support_cmd;

}

sys_weak slave_rsp_code_def slave_write_one_reg(uint16_t reg_addr, uint16_t data) {
    return rsp_nut_support_cmd;

}

sys_weak slave_rsp_code_def slave_write_mul_coils_reg(uint16_t reg_addr, uint16_t reg_num, bool *data) {
    return rsp_nut_support_cmd;

}

sys_weak slave_rsp_code_def slave_write_mul_reg(uint16_t reg_addr, uint16_t reg_num, uint8_t *data) {
    return rsp_nut_support_cmd;

}

sys_weak slave_rsp_code_def slave_write_one_coil(uint16_t reg_addr, bool val) {
    return rsp_nut_support_cmd;

}